"use client"; import { useEffect, useRef, useState } from "react"; import { useParams, useRouter } from "next/navigation"; import { ResizablePanelGroup, ResizablePanel, ResizableHandle, } from "../../../components/ui/resizable"; import { MediaPanel } from "../../../components/editor/media-panel"; import { PropertiesPanel } from "../../../components/editor/properties-panel"; import { Timeline } from "../../../components/editor/timeline"; import { PreviewPanel } from "../../../components/editor/preview-panel"; import { EditorHeader } from "@/components/editor-header"; import { usePanelStore } from "@/stores/panel-store"; import { useProjectStore } from "@/stores/project-store"; import { EditorProvider } from "@/components/editor-provider"; import { usePlaybackControls } from "@/hooks/use-playback-controls"; import { useDisableBrowserZoom } from "@/hooks/use-disable-browser-zoom"; import { Onboarding } from "@/components/onboarding"; export default function Editor() { const { toolsPanel, previewPanel, mainContent, timeline, setToolsPanel, setPreviewPanel, setMainContent, setTimeline, propertiesPanel, setPropertiesPanel, } = usePanelStore(); const { activeProject, loadProject, createNewProject } = useProjectStore(); const params = useParams(); const router = useRouter(); const projectId = params.project_id as string; const handledProjectIds = useRef>(new Set()); const [isOnboardingOpen, setIsOnboardingOpen] = useState(true); useDisableBrowserZoom(); usePlaybackControls(); useEffect(() => { const initProject = async () => { if (!projectId) return; if (activeProject?.id === projectId) { return; } if (handledProjectIds.current.has(projectId)) { return; } try { await loadProject(projectId); } catch (error) { handledProjectIds.current.add(projectId); const newProjectId = await createNewProject("Untitled Project"); router.replace(`/editor/${newProjectId}`); return; } }; initProject(); }, [projectId, activeProject?.id, loadProject, createNewProject, router]); return (
{/* Main content area */} {/* Tools Panel */} {/* Preview Area */} {/* Timeline */}
); }